namespace CSharpPro;

public class Demo {
    void Testprint1()
    {
        Console.Write("请输入三个整数(空格分隔)：");
        string[] inputs = Console.ReadLine().Split();
        int x = int.Parse(inputs[0]),
            y = int.Parse(inputs[1]),
            z = int.Parse(inputs[2]);

        // 排序
        if (x > y) (x, y) = (y, x);
        if (y > z) (y, z) = (z, y);
        if (x > y) (x, y) = (y, x);

        // 输出结果
        Console.WriteLine($"从小到大排序：{x} {y} {z}");
    }

    void Testprint2()
    {
        static void Main()
        {
            int sum = 0;
            Console.WriteLine("1-100之间所有不是7的倍数且不包含7的数字：");

            for (int i = 1; i <= 100; i++)
            {
                // 检查是否是7的倍数
                bool isMultipleOf7 = i % 7 == 0;

                // 检查是否包含数字7（个位或十位是7）
                bool contains7 = i % 10 == 7 || i / 10 == 7;

                // 如果都不满足，则符合条件
                if (!isMultipleOf7 && !contains7)
                {
                    Console.Write(i + " ");
                    sum += i;
                }
            }

            Console.WriteLine($"\n这些数字的总和是：{sum}");
        }
    }

    void Testprint3()
    {
        for (int i = 1; i <= 9; i++)
        {
            // 内层循环控制列数（乘数2）
            for (int j = 1; j <= i; j++)
            {
                // 格式化输出，确保对齐
                Console.Write($"{j}×{i}={i * j}\t");
            }

            // 每行结束后换行
            Console.WriteLine();
        }
    }

    void Testprint4()
    {
        Console.WriteLine("1000以内的完数有：");

        // 遍历1到1000的所有数
        for (int num = 2; num <= 1000; num++)
        {
            int sum = 0; // 存储真因子之和

            // 寻找num的所有真因子（除自身外的因数）
            for (int i = 1; i < num; i++)
            {
                if (num % i == 0)
                {
                    sum += i; // 累加真因子
                }
            }

            // 判断是否为完数
            if (sum == num)
            {
                Console.Write(num + " ");
            }
        }
    }

    void Testprint5()
    {
        Console.Write("请输入一个正整数：");
        string input = Console.ReadLine();

        // 验证输入是否为正整数
        if (int.TryParse(input, out int number) && number > 0)
        {
            // 1. 计算位数
            int digitCount = input.Length;
            Console.WriteLine($"该数字是 {digitCount} 位数");

            // 2. 逆序打印各位数字
            Console.Write("逆序打印各位数字：");
            for (int i = input.Length - 1; i >= 0; i--)
            {
                Console.Write(input[i] + " ");
            }
        }
        else
        {
            Console.WriteLine("输入的不是有效的正整数！");
        }
    }

    void Testprint6()
    {
        static void Main()
        {
            Console.Write("请输入菱形的行数（正奇数）：");
            string input = Console.ReadLine();

            // 验证输入是否为有效的正奇数
            if (int.TryParse(input, out int rows) && rows > 0 && rows % 2 != 0)
            {
                PrintDiamond(rows);
            }
            else
            {
                Console.WriteLine("请输入有效的正奇数！");
            }
        }

        // 打印菱形的方法
        static void PrintDiamond(int rows)
        {
            int half = rows / 2;

            // 打印上半部分（包括中间行）
            for (int i = 0; i <= half; i++)
            {
                // 打印空格
                for (int j = 0; j < half - i; j++)
                {
                    Console.Write(" ");
                }

                // 打印星号
                for (int k = 0; k < 2 * i + 1; k++)
                {
                    Console.Write("*");
                }

                Console.WriteLine();
            }

            // 打印下半部分
            for (int i = half - 1; i >= 0; i--)
            {
                // 打印空格
                for (int j = 0; j < half - i; j++)
                {
                    Console.Write(" ");
                }

                // 打印星号
                for (int k = 0; k < 2 * i + 1; k++)
                {
                    Console.Write("*");
                }

                Console.WriteLine();
            }
        }
    }
}